package com.qms.qep.mapper;

import java.util.List;
import java.util.Map;
import com.qms.qep.domain.DefectRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 缺陷记录Mapper接口
 * 
 * @author qms
 */
@Mapper
public interface DefectRecordMapper 
{
    /**
     * 查询缺陷记录
     * 
     * @param id 缺陷记录主键
     * @return 缺陷记录
     */
    public DefectRecord selectDefectRecordById(Integer id);

    /**
     * 查询缺陷记录列表
     * 
     * @param defectRecord 缺陷记录
     * @return 缺陷记录集合
     */
    public List<DefectRecord> selectDefectRecordList(DefectRecord defectRecord);

    /**
     * 新增缺陷记录
     * 
     * @param defectRecord 缺陷记录
     * @return 结果
     */
    public int insertDefectRecord(DefectRecord defectRecord);

    /**
     * 修改缺陷记录
     * 
     * @param defectRecord 缺陷记录
     * @return 结果
     */
    public int updateDefectRecord(DefectRecord defectRecord);

    /**
     * 删除缺陷记录
     * 
     * @param id 缺陷记录主键
     * @return 结果
     */
    public int deleteDefectRecordById(Integer id);

    /**
     * 批量删除缺陷记录
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDefectRecordByIds(Integer[] ids);
    
    /**
     * 根据检验任务ID查询缺陷记录
     *
     * @param inspectionTaskId 检验任务ID
     * @return 缺陷记录集合
     */
    public List<DefectRecord> selectDefectRecordByTaskId(Integer inspectionTaskId);
    
    /**
     * 统计缺陷记录数量
     *
     * @param defectRecord 缺陷记录
     * @return 结果
     */
    public int countDefectRecord(DefectRecord defectRecord);

    /**
     * 根据ID查询缺陷记录（Map格式返回）
     *
     * @param defectId 缺陷记录ID
     * @return Map格式的缺陷记录
     */
    public Map<String, Object> selectDefectRecordByIdToMap(Integer defectId);
    
    /**
     * 获取缺陷详情
     *
     * @param defectId 缺陷ID
     * @return 缺陷详情
     */
    public DefectRecord getDefectById(Integer defectId);
    
    /**
     * 获取缺陷统计
     *
     * @param params 查询参数
     * @return 缺陷统计数据
     */
    public List<Map<String, Object>> getDefectStatistics(Map<String, Object> params);
    
    /**
     * 获取缺陷位置分布
     *
     * @param params 查询参数
     * @return 缺陷位置分布数据
     */
    public List<Map<String, Object>> getDefectLocationDistribution(Map<String, Object> params);
    
    /**
     * 获取缺陷严重程度分布
     *
     * @param params 查询参数
     * @return 缺陷严重程度分布数据
     */
    public List<Map<String, Object>> getDefectSeverityDistribution(Map<String, Object> params);
    
    /**
     * 获取缺陷类型分布
     *
     * @param params 查询参数
     * @return 缺陷类型分布数据
     */
    public List<Map<String, Object>> getDefectTypeDistribution(Map<String, Object> params);
    
    /**
     * 获取TOP缺陷
     *
     * @param params 查询参数
     * @return TOP缺陷列表
     */
    public List<Map<String, Object>> getTopDefects(Map<String, Object> params);
    
    /**
     * 获取产品缺陷记录
     *
     * @param productId 产品ID
     * @return 缺陷记录列表
     */
    public List<Map<String, Object>> getProductDefectRecords(@Param("productId") Integer productId);
    
    /**
     * 获取批次缺陷记录
     *
     * @param batchId 批次ID
     * @return 缺陷记录列表
     */
    public List<Map<String, Object>> getBatchDefectRecords(@Param("batchId") Integer batchId);
    
    /**
     * 查找同类型缺陷
     *
     * @param defectTypeId 缺陷类型ID
     * @param defectId 当前缺陷ID (排除)
     * @return 同类型缺陷列表
     */
    public List<Map<String, Object>> getSimilarDefects(@Param("defectTypeId") Integer defectTypeId, @Param("defectId") Integer defectId);
    
    /**
     * 获取同类型缺陷统计信息
     *
     * @param params 查询参数
     * @return 同类型缺陷统计信息
     */
    public List<Map<String, Object>> getSimilarDefectStatistics(Map<String, Object> params);
    
    /**
     * 根据产品ID获取缺陷记录
     *
     * @param productId 产品ID
     * @return 缺陷记录列表
     */
    public List<Map<String, Object>> getDefectRecordsByProductId(@Param("productId") Integer productId);
    
    /**
     * 根据批次ID获取缺陷记录
     *
     * @param batchId 批次ID
     * @return 缺陷记录列表
     */
    public List<Map<String, Object>> getDefectRecordsByBatchId(@Param("batchId") Integer batchId);
    
    /**
     * 获取所有缺陷名称列表
     * 
     * @return 缺陷名称列表
     */
    public List<Map<String, Object>> getAllDefectNames();
    
    /**
     * 获取所有缺陷记录
     * 
     * @return 所有缺陷记录
     */
    public List<Map<String, Object>> getAllDefects();
    
    /**
     * 根据缺陷名称获取缺陷记录
     * 
     * @param defectName 缺陷名称
     * @return 缺陷记录
     */
    public Map<String, Object> getDefectByName(@Param("defectName") String defectName);
} 